Unable to translate Unicode character xxx at index xxx to specified code page.

—— 非 UTF-8 字符的过滤

momo314相同方式共享非商业用途署名转载

今天在尝试将数据库数据被分到 Azure Storage Table 的时候发生了一个异常:

Microsoft.WindowsAzure.Storage.StorageException: Unable to translate Unicode character \uD83D at index 397 to specified code page.

异常信息倒是写的很清楚,Azure Storage Table 并不支持这个字符。

考虑到我们的业务场景,非 UTF-8 的字符一般都是些 emoji 表情符号,并不影响文本含义,备份之后也只是作为语料进行模型训练的用途,所以暂定将所有文本字段进行过滤,只保留 UTF-8 的字符之后,再写入 Azure Storage Tabke。

于是便有了下面一段代码:

public class Demo
{
    private static readonly Encoding _utf8 = Encoding.GetEncoding(
            "UTF-8",
            new EncoderReplacementFallback(string.Empty),
            new DecoderExceptionFallback()
        );

    private string _title;
    public string Title
    {
        get
        {
            return _title;
        }
        set
        {
            if (string.IsNullOrEmpty())
                _title = value;
            _title = _utf8.GetString(_utf8.GetBytes(value));
        }
    }
}
✎﹏ 本文来自于 momo314和他们家的猫,文章原创,转载请注明作者并保留原文链接。